package benchmarks.tpcc;

import api.Procedure;
import api.connection.DBConnection;
import api.result.Result;

import java.util.Random;

/***
 * TPC-C中的5种基本事务参考tpc-c文档第108页至116页
 * 文档提供的是SQL的事务代码，也可以参考
 * https://github.com/oltpbenchmark/oltpbench/tree/master/src/com/oltpbenchmark/benchmarks/tpcc/procedures
 * 负责Mongo和Redis的同学需要根据转换后的结构翻译并转换这5种事务
 */
public abstract class TPCCTransaction extends Procedure {
    /***
     * 一个TPC-C的事务
     * @param connection 实例化的connection或client
     * @param gen 随机数生成器
     * @param terminalWarehouseID terminal所负责的warehouse id，一般一个terminal只负责一个warehouse
     * @param numWarehouses warehouse总数量
     * @param terminalDistrictLowerID 给定warehouse所对应的district下界，包括下界
     * @param terminalDistrictUpperID 给定warehouse所对应的district上界，不包括上界
     * @return
     */
    public abstract Result run(DBConnection connection, Random gen,
                               int terminalWarehouseID, int numWarehouses,
                               int terminalDistrictLowerID, int terminalDistrictUpperID);
}
